package com.vip.base;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import org.junit.jupiter.api.Test;

import java.util.Collections;

public class AutoCodeGenerator {

    String url = "jdbc:mysql://localhost:3306/base?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai";
    String username = "root";
    String password = "123456";

    @Test
    void Generator(){
        String projectPath = System.getProperty("user.dir");
        FastAutoGenerator.create(url, username, password)
            .globalConfig(builder -> {
                builder.author("vip") // 设置作者
                        .enableSwagger() // 开启 swagger 模式
                        .disableOpenDir() // 生成后是否打开资源管理器
                        .dateType(DateType.ONLY_DATE) // 设置日期类型
                        .outputDir(projectPath + "/src/main/java"); // 指定输出目录
            })
            .packageConfig(builder -> {
                builder.parent("com.vip.base") // 设置父包名
//                        .moduleName("base") // 设置父包模块名
                        .controller("controller") // 结构包名
                        .entity("entity")
                        .mapper("mapper")
                        .service("service")
                        .serviceImpl("service.impl")
                        .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径
            })
            .strategyConfig(builder -> {
                builder.addInclude("t_test") // 设置需要生成的表名
                        .addTablePrefix("t_") // 设置过滤表前缀
                        // Entity 策略配置
                        .entityBuilder()
                        .enableLombok() //开启 Lombok
                        .enableFileOverride() // 覆盖已生成文件
                        .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略：下划线转驼峰命
                        .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略：下划线转驼峰命
                        // Mapper 策略配置
                        .mapperBuilder()
//                        .enableFileOverride() // 覆盖已生成文件
                        // Service 策略配置
                        .serviceBuilder()
//                        .enableFileOverride() // 覆盖已生成文件
                        .formatServiceFileName("%sService") //格式化 service 接口文件名称，%s进行匹配表名，如 UserService
                        .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称，%s进行匹配表名，如 UserServiceImpl
                        // Controller 策略配置
                        .controllerBuilder()
//                        .enableFileOverride() // 覆盖已生成文件
                        .enableRestStyle(); // 开启 Restfull
            })
            .templateEngine(new VelocityTemplateEngine()) // 使用Velocity引擎模板
            .execute();
    }

}
